package com.us.simple.common.util;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

/**
 * <p>
 * 代码生成器演示
 * </p>
 */

public class MpGenerator {

	public static void main(String[] args) {
		AutoGenerator mpg = new AutoGenerator();
		// 全局配置
		GlobalConfig gc = new GlobalConfig();
		// gc.setOutputDir("/Users/Cheung/Documents/Mp/");
		gc.setOutputDir("D:/代码");// 生成后存放的路径 develop/workspace_zbxh/sersServer/src/main/java
		gc.setFileOverride(true);
		gc.setActiveRecord(true);
		gc.setEnableCache(false);// XML 二级缓存
		gc.setBaseResultMap(true);// XML ResultMap
		gc.setBaseColumnList(false);// XML columList
		gc.setAuthor("王自谦");
		mpg.setGlobalConfig(gc);

		// 数据源配置
		DataSourceConfig dsc = new DataSourceConfig();
		dsc.setDbType(DbType.POSTGRE_SQL);
		dsc.setDriverName("org.postgresql.Driver");
		dsc.setUrl("jdbc:postgresql://192.168.50.13:54322/dev_rts?useAffectedRows=true");
		dsc.setUsername("postgres");
		dsc.setPassword("BJzbxh@905");
		mpg.setDataSource(dsc);

		// 策略配置
		StrategyConfig strategy = new StrategyConfig();
		strategy.setNaming(NamingStrategy.underline_to_camel);// 表名生成策略 驼峰
		strategy.setColumnNaming(NamingStrategy.underline_to_camel); // 列命名策略 驼峰
		strategy.setTablePrefix("t_rts_");
		//strategy.setEntityTableFieldAnnotationEnable(true); // 实体字段注解
		//strategy.setControllerMappingHyphenStyle(true); // 控制器映射路径使用连字符风格
		strategy.setEntityLombokModel(true); // 开启 Lombok 模型
		strategy.setRestControllerStyle(true); // 开启 restController 风格 返回json数据 不是html页面
		// 需要生成的表的表名
		strategy.setInclude("t_rts_org_testtable_item_updatelog");
		mpg.setStrategy(strategy);
		// 包配置
		PackageConfig pc = new PackageConfig();
		pc.setParent("com.zbxh.rts");
		pc.setModuleName("sys");
		pc.setEntity("entity");
		pc.setMapper("mapper");
		mpg.setPackageInfo(pc);
		// 注入自定义配置，可以在 VM 中使用 cfg.abc 设置的值
		InjectionConfig cfg = new InjectionConfig() {
			@Override
			public void initMap() {
				Map<String, Object> map = new HashMap<String, Object>();
				map.put("abc", this.getConfig().getGlobalConfig().getAuthor() + "-mp");
				this.setMap(map);
			}
		};
		mpg.setCfg(cfg);
		// 自定义模板配置，可以 copy 源码 mybatis-plus/src/main/resources/template 下面内容修改，
		// 放置自己项目的 src/main/resources/template 目录下, 默认名称一下可以不配置，也可以自定义模板名称
		// 执行生成
		mpg.execute();
		// 打印注入设置
		System.err.println(mpg.getCfg().getMap().get("abc"));
	}

	// 根据key读取value
	public static String readValue(String key) {
		String filePath = MpGenerator.class.getClassLoader().getResource("jdbc.properties").getPath();
		Properties props = new Properties();
		try {
			InputStream in = new BufferedInputStream(new FileInputStream(filePath));
			props.load(in);
			String value = props.getProperty(key);
			System.out.println(key + value);
			return value;
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

}
